
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>
   <TITLE>vsepg_c</TITLE>
</HEAD>

<BODY style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<A name="TOP"></A>

<table style="text-align: left; margin-left: auto; margin-right: auto; width: 800px;"
 border="0" cellpadding="5" cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(153, 153, 153); vertical-align: middle; text-align: center;">
      <div align="right"> 
      <small><small><a href="index.html">Index Page</a></small></small>
      </div>
      <b>vsepg_c</b> </td>
    </tr>

    <tr>
      <td style="vertical-align: top;">

<small><div align="center">
<A HREF="index.html#A">A</A>&nbsp;
<A HREF="index.html#B">B</A>&nbsp;
<A HREF="index.html#C">C</A>&nbsp;
<A HREF="index.html#D">D</A>&nbsp;
<A HREF="index.html#E">E</A>&nbsp;
<A HREF="index.html#F">F</A>&nbsp;
<A HREF="index.html#G">G</A>&nbsp;
<A HREF="index.html#H">H</A>&nbsp;
<A HREF="index.html#I">I</A>&nbsp;
<A HREF="index.html#J">J</A>&nbsp;
<A HREF="index.html#K">K</A>&nbsp;
<A HREF="index.html#L">L</A>&nbsp;
<A HREF="index.html#M">M</A>&nbsp;
<A HREF="index.html#N">N</A>&nbsp;
<A HREF="index.html#O">O</A>&nbsp;
<A HREF="index.html#P">P</A>&nbsp;
<A HREF="index.html#Q">Q</A>&nbsp;
<A HREF="index.html#R">R</A>&nbsp;
<A HREF="index.html#S">S</A>&nbsp;
<A HREF="index.html#T">T</A>&nbsp;
<A HREF="index.html#U">U</A>&nbsp;
<A HREF="index.html#V">V</A>&nbsp;
<A HREF="index.html#W">W</A>&nbsp;
<A HREF="index.html#X">X</A>&nbsp;
</div></small>
       <br>
       <table style="text-align: left; width: 60%; margin-left: auto; margin-right: auto;"
       border="0" cellspacing="2" cellpadding="2">
        <tbody>
          <tr>
            <td style="width: 50%; text-align: center;">
            <small>
              <a href="#Procedure">Procedure<br></a>
              <a href="#Abstract">Abstract<br></a>
              <a href="#Required_Reading">Required_Reading<br></a>
              <a href="#Keywords">Keywords<br></a>
              <a href="#Brief_I/O">Brief_I/O<br></a>
              <a href="#Detailed_Input">Detailed_Input<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Detailed_Output">Detailed_Output<br></a>
              <a href="#Parameters">Parameters<br></a>
              <a href="#Exceptions">Exceptions<br></a>
              <a href="#Files">Files<br></a>
              <a href="#Particulars">Particulars<br></a>
              <a href="#Examples">Examples<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Restrictions">Restrictions<br></a>
              <a href="#Literature_References">Literature_References<br></a>
              <a href="#Author_and_Institution">Author_and_Institution<br></a>
              <a href="#Version">Version<br></a>
              <a href="#Index_Entries">Index_Entries<br></a>
             </small>
            </td>
          </tr>
        </tbody>
</table>

<h4><a name="Procedure">Procedure</a></h4>
<PRE>
   SpiceDouble vsepg_c ( ConstSpiceDouble * v1,
                         ConstSpiceDouble * v2,
                         SpiceInt           ndim )

</PRE>
<h4><a name="Abstract">Abstract</a></h4>
<PRE>
   <b>vsepg_c</b> finds the separation angle in radians between two double
   precision vectors of arbitrary dimension. This angle is defined
   as zero if either vector is zero.
</PRE>
<h4><a name="Required_Reading">Required_Reading</a></h4>
<PRE>
   None.
</PRE>
<h4><a name="Keywords">Keywords</a></h4>
<PRE>
    ANGLE
    VECTOR


</PRE>
<h4><a name="Brief_I/O">Brief_I/O</a></h4>
<PRE>
    VARIABLE  I/O  DESCRIPTION
    --------  ---  --------------------------------------------------
     v1        I     First vector.
     v2        I     Second vector.
     ndim      I     The number of elements in v1 and v2.
</PRE>
<h4><a name="Detailed_Input">Detailed_Input</a></h4>
<PRE>
    v1      is any double precision vector of arbitrary dimension.
    v2      is also a double precision vector of arbitrary dimension.
            v1 or v2 or both may be the zero vector.
    ndim    is the dimension of the both of the input vectors
            v1 and v2.
</PRE>
<h4><a name="Detailed_Output">Detailed_Output</a></h4>
<PRE>
    <b>vsepg_c</b> the angle between v1 and v2 expressed in radians.
            <b>vsepg_c</b> is strictly non-negative.  For input vectors of
            four or more dimensions, the angle is defined as the
            generalization of the definition for three dimensions.
            If either v1 or v2 is the zero vector, then <b>vsepg_c</b> is
            defined to be 0 radians.
</PRE>
<h4><a name="Parameters">Parameters</a></h4>
<PRE>
    None.
</PRE>
<h4><a name="Exceptions">Exceptions</a></h4>
<PRE>
   Error free.
</PRE>
<h4><a name="Files">Files</a></h4>
<PRE>
    None
</PRE>
<h4><a name="Particulars">Particulars</a></h4>
<PRE>
    In four or more dimensions this angle does not have a physically
    realizable interpretation.  However, the angle is defined as
    the generalization of the following definition which is valid in
    three or two dimensions:

    In the plane, it is a simple matter to calculate the angle
    between two vectors once the two vectors have been made to be
    unit length.  Then, since the two vectors form the two equal
    sides of an isosceles triangle, the length of the third side
    is given by the expression

          length = 2.0 * sine ( vsepg/2.0 )

    The length is given by the magnitude of the difference of the
    two unit vectors

          length = norm ( u1 - u2 )

    Once the length is found, the value of <b>vsepg_c</b> may be calculated
    by inverting the first expression given above as

          <b>vsepg_c</b> = 2.0 * arcsine ( length/2.0 )

    This expression becomes increasingly unstable when <b>vsepg_c</b> gets
    larger than pi/2 or 90 degrees.  In this situation (which is
    easily detected by determining the sign of the dot product of
    v1 and v2) the supplementary angle is calculated first and
    then <b>vsepg_c</b> is given by

          <b>vsepg_c</b> = pi - SUPPLEMENTARY_ANGLE
</PRE>
<h4><a name="Examples">Examples</a></h4>
<PRE>
    The following table gives sample values for v1, v2 and <b>vsepg_c</b>
    implied by the inputs.

    v1               v2               ndim          <b>vsepg_c</b>
    -----------------------------------------------------------------
    (1, 0, 0, 0)     (1, 0, 0, 0)       4           0.0
    (1, 0, 0)        (0, 1, 0)          3           pi/2 (=1.71...)
    (3, 0)           (-5, 0)            2           pi   (=3.14...)
</PRE>
<h4><a name="Restrictions">Restrictions</a></h4>
<PRE>
    The user is required to insure that the input vectors will not
    cause floating point overflow upon calculation of the vector
    dot product since no error detection or correction code is
    implemented.  In practice, this is not a significant
    restriction.
</PRE>
<h4><a name="Literature_References">Literature_References</a></h4>
<PRE>
    None
</PRE>
<h4><a name="Author_and_Institution">Author_and_Institution</a></h4>
<PRE>
   C.A. Curzon     (JPL)
   K.R. Gehringer  (JPL)
   H.A. Neilan     (JPL)
   W.L. Taber      (JPL)
   E.D. Wright     (JPL)
</PRE>
<h4><a name="Version">Version</a></h4>
<PRE>
   -CSPICE Version 1.0.0, 29-JUN-1999
</PRE>
<h4><a name="Index_Entries">Index_Entries</a></h4>
<PRE>
   angular separation of n-dimensional vectors
</PRE>
<h4>Link to routine vsepg_c source file <a href='../../../src/cspice/vsepg_c.c'>vsepg_c.c</a> </h4>

      </td>
    </tr>
  </tbody>
</table>

   <pre>Wed Jun  9 13:05:33 2010</pre>

</body>
</html>

